package com.gsbelarus.gedemin.income.fragment;

import android.view.View;
import android.widget.TextView;

import com.gsbelarus.gedemin.income.SumFormatter;
import com.gsbelarus.gedemin.income.R;
import com.gsbelarus.gedemin.income.sync.DataBaseHelper;
import com.gsbelarus.gedemin.lib.ui.fragment.FragmentModel;

import java.text.SimpleDateFormat;

/**
 * Расчетный счет
 * Это первый экран после аутентификации и синхронизации. На экране выводится:
 * 1. дата и время, на которые получены данные
 * 2. остаток на расчетном счету
 * 3. внизу, ненавязчиво: логотип, наименование программы, номер версии, ссылка
 * на сайт GS.
 */
public class BalanceFrgm extends FragmentModel implements View.OnClickListener {

    private Long balance;
    private Long date;
    private TextView balanceSum;
    private TextView balanceSumSmall;
    private TextView textDateTime;
    private TextView dateTime;

    private SumFormatter formatter;

    /**
     * @return id View для отрисовки в фрагменте
     */
    @Override
    public int getViewId() {
        return R.layout.frame_balance;
    }

    /**
     * Вызывается при создании View или при смене ориентации экрана.
     * Может быть переопределен в классе наследнике
     *
     * @param rootView корневое View
     */
    @Override
    public void onCreateViewFragment(View rootView) {
        super.onCreateViewFragment(rootView);

        formatter = new SumFormatter(context);

        balanceSum = (TextView) rootView.findViewById(R.id.text_balance_sum);
        balanceSumSmall = (TextView) rootView.findViewById(R.id.text_balance_sum_small);
        textDateTime = (TextView) rootView.findViewById(R.id.text_date_time);
        dateTime = (TextView) rootView.findViewById(R.id.date_time);

        rootView.setOnClickListener(this);
    }

    /**
     * Чтение данных из БД в новом потоке
     */
    @Override
    public void readDataBase() {
        DataBaseHelper dbh = DataBaseHelper.getInstance(context);
        balance = dbh.getBalance();
        date = dbh.getSyncDateInMilliSeconds();
    }

    /**
     * Метод вызывается после чтения данных из БД или при смене ориентации экрана.
     * Может быть вызван до окончания выполнения потока для запроса данных из БД, поэтому следует проверять данные на null.
     * Служит для инициализации View данными
     *
     * @param rootView корневое View
     */
    @Override
    public void initView(View rootView) {
        if (balance == null)
            return;
        if (date == null) {
            textDateTime.setText("");
            dateTime.setText("");
            balanceSum.setText(getString(R.string.text_no_data));
        } else {
            textDateTime.setText(getString(R.string.text_date_ver));
            dateTime.setText(new SimpleDateFormat("dd.MM.yyyy  HH:mm").format(date));

            String bal = formatter.formatWithoutRounding(balance);
            if (bal.length() < 8) {
                balanceSum.setText(bal);
            } else {
                balanceSumSmall.setText(bal.substring(bal.length() - 7, bal.length()));
                balanceSum.setText(bal.substring(0, bal.length() - 7));
            }
        }
    }

    @Override
    public void onClick(View view) {
        ((BalanceFrgmVP) getParentFragment()).showTrainingAnimation();
    }
}
